home *** CD-ROM | disk | FTP | other *** search
/ CICA 1993 April / CICA MS Windows - April 1993.iso / unzipped / util / wdasm15 / hellohil.asm < prev    next >
Assembly Source File  |  1993-03-03  |  22KB  |  1,113 lines

  1.  
  2. ; HiLevel Syntax Generator Version 2.00
  3. ; Source file: c:\wdasm\hello1.asm
  4.  
  5.         TITLE    WDASM Example Program
  6.         .286
  7.         .MODEL    SMALL
  8.  
  9.         OPTION    NOM510
  10.         OPTION    CASEMAP:NONE
  11.         OPTION    PROLOGUE:cPrologue
  12.         OPTION    EPILOGUE:cEpilogue
  13.  
  14.         INCLUDE    PROLOGUE.INC
  15.         INCLUDE    HILEVEL.INC
  16.  
  17.         INCLUDE    HELLO.INC
  18.  
  19.         EXTERN        DefWindowProc:FAR
  20.         EXTERN        GetMessage:FAR
  21.         EXTERN        TranslateMessage:FAR
  22.         EXTERN        FatalExit:FAR
  23.         EXTERN        DispatchMessage:FAR
  24.         EXTERN        GetVersion:FAR
  25.         EXTERN        GetDosEnvironment:FAR
  26.         EXTERN        LocalAlloc:FAR
  27.         EXTERN        LocalRealloc:FAR
  28.         EXTERN        LocalFree:FAR
  29.         EXTERN        FatalAppExit:FAR
  30.         EXTERN        LocalSize:FAR
  31.         EXTERN        UpdateWindow:FAR
  32.         EXTERN        GlobalRealloc:FAR
  33.         EXTERN        GlobalSize:FAR
  34.         EXTERN        InitApp:FAR
  35.         EXTERN        PostQuitMessage:FAR
  36.         EXTERN        LockSegment:FAR
  37.         EXTERN        UnlockSegment:FAR
  38.         EXTERN        WaitEvent:FAR
  39.         EXTERN        GetClientRect:FAR
  40.         EXTERN        GetModuleFileName:FAR
  41.         EXTERN        BeginPaint:FAR
  42.         EXTERN        EndPaint:FAR
  43.         EXTERN        CreateWindow:FAR
  44.         EXTERN        ShowWindow:FAR
  45.         EXTERN        LoadCursor:FAR
  46.         EXTERN        LoadIcon:FAR
  47.         EXTERN        RegisterClass:FAR
  48.         EXTERN        InitTask:FAR
  49.         EXTERN        GetStockObject:FAR
  50.         EXTERN        DrawText:FAR
  51.         EXTERN        Dos3Call:FAR
  52.         EXTERN        __winflags:FAR
  53.  
  54.  
  55.         .CODE
  56.  
  57. Procedure0000    PROC    NEAR C
  58.         ADD    BYTE PTR [BX+SI], AL
  59.         ADD    BYTE PTR [BX+SI], AL
  60.         ADD    BYTE PTR [BX+SI], AL
  61.         ADD    BYTE PTR [BX+SI], AL
  62.         ADD    BYTE PTR [BX+SI], AL
  63.         ADD    BYTE PTR [BX+SI], AL
  64.         ADD    BYTE PTR [BX+SI], AL
  65.         ADD    BYTE PTR [BX+SI], AL
  66. Procedure0000    ENDP
  67.  
  68.  
  69. Procedure0010    PROC    NEAR PASCAL <NOLOADDS, NOINCBP, FORCEFRAME, CHECKSTACK>, par12:WORD, par10:WORD, par8:WORD, par6:WORD, par4:WORD
  70.         LOCAL    local2:WORD, local4:WORD, local6:WORD,    \
  71.             local8:WORD, local10:WORD, local12:WORD, local14:WORD,    \
  72.             local16:WORD, local18:WORD, local20:WORD, local22:WORD,    \
  73.             local24:WORD, local26:WORD, local28:WORD, local30:WORD,    \
  74.             local32:WORD, local34:WORD, local36:WORD, local38:WORD,    \
  75.             local40:WORD, local42:WORD, local44:WORD, local46:WORD
  76.         .IF    (WORD PTR par10 == 0)
  77. L0022H:            MOV    WORD PTR local46, 0003H
  78.             MOV    WORD PTR local44, LROFFSET WNDPROC
  79.             MOV    WORD PTR local42, SEG WNDPROC
  80.             MOV    WORD PTR local40, 0000H
  81.             MOV    WORD PTR local38, 0000H
  82.             MOV    AX, WORD PTR par12
  83.             MOV    WORD PTR local36, AX
  84.             cCall    <FAR PTR LoadIcon, 0, 0, 7F00H>
  85.             MOV    WORD PTR local34, AX
  86.             cCall    <FAR PTR LoadCursor, 0, 0, 7F00H>
  87.             MOV    WORD PTR local32, AX
  88.             cCall    <FAR PTR GetStockObject, 0>
  89.             MOV    WORD PTR local30, AX
  90.             MOV    WORD PTR local28, 0000H
  91.             MOV    WORD PTR local26, 0000H
  92.             MOV    AX, 0010H
  93.             MOV    DX, DS
  94.             MOV    WORD PTR local24, AX
  95.             MOV    WORD PTR local22, DX
  96.             LEA    AX, WORD PTR local46
  97.             MOV    DX, SS
  98.             cCall    <FAR PTR RegisterClass, DX, AX>
  99.         .ENDIF
  100. L008AH:        MOV    AX, 0010H
  101.         MOV    DX, DS
  102.         PUSH    DX
  103.         PUSH    AX
  104.         MOV    AX, 00C2H
  105.         MOV    DX, DS
  106.         cCall    <FAR PTR CreateWindow, DX, AX, 00CFH, 0, 8000H, 8000H, 8000H, 8000H, 0, 0, WORD PTR par12, 0, 0>
  107.         MOV    WORD PTR local2, AX
  108.         cCall    <FAR PTR ShowWindow, AX, WORD PTR par4>
  109.         cCall    <FAR PTR UpdateWindow, WORD PTR local2>
  110. L00CDH:        LEA    AX, WORD PTR local20
  111.         MOV    DX, SS
  112.         cCall    <FAR PTR GetMessage, DX, AX, 0, 0, 0>
  113.         .IF    (AX)
  114.             LEA    AX, WORD PTR local20
  115.             MOV    DX, SS
  116.             cCall    <FAR PTR TranslateMessage, DX, AX>
  117.             LEA    AX, WORD PTR local20
  118.             MOV    DX, SS
  119.             cCall    <FAR PTR DispatchMessage, DX, AX>
  120.             JMP    SHORT L00CDH
  121.             NOP
  122.         .ENDIF
  123. L00FEH:        MOV    AX, WORD PTR local16
  124.         RET
  125. Procedure0010    ENDP
  126.  
  127.  
  128. Procedure0105    PROC    NEAR C
  129.         NOP
  130. Procedure0105    ENDP
  131.  
  132.  
  133. WNDPROC    PROC    FAR PASCAL PUBLIC <LOADDS, INCBP, FORCEFRAME, CHECKSTACK>, par14:WORD, par12:WORD, par10:WORD, par8:WORD, par6:WORD
  134.         LOCAL    local2:WORD, local4:WORD, local6:WORD,    \
  135.             local8:WORD, local10:WORD, local12:WORD, local14:WORD,    \
  136.             local16:WORD, local18:WORD, local20:WORD, local22:WORD,    \
  137.             local24:WORD, local26:WORD, local28:WORD, local30:WORD,    \
  138.             local32:WORD, local34:WORD, local36:WORD, local38:WORD,    \
  139.             local40:WORD, local42:WORD, local44:WORD
  140.         PUSH    SI
  141.         PUSH    DI
  142.         MOV    SI, WORD PTR par14
  143.         MOV    AX, WORD PTR par12
  144.         JMP    NEAR PTR L017AH
  145.         NOP
  146. L0122H:        PUSH    SI
  147.         LEA    AX, WORD PTR local36
  148.         MOV    DX, SS
  149.         cCall    <FAR PTR BeginPaint, DX, AX>
  150.         MOV    DI, AX
  151.         PUSH    SI
  152.         LEA    AX, WORD PTR local44
  153.         MOV    DX, SS
  154.         cCall    <FAR PTR GetClientRect, DX, AX>
  155.         PUSH    DI
  156.         MOV    AX, 00DFH
  157.         MOV    DX, DS
  158.         PUSH    DX
  159.         PUSH    AX
  160.         PUSH    -1
  161.         LEA    AX, WORD PTR local44
  162.         MOV    DX, SS
  163.         cCall    <FAR PTR DrawText, DX, AX, 37>
  164.         PUSH    SI
  165.         LEA    AX, WORD PTR local36
  166.         MOV    DX, SS
  167.         cCall    <FAR PTR EndPaint, DX, AX>
  168.         XOR    AX, AX
  169.         XOR    DX, DX
  170.         JMP    SHORT L019FH
  171.         NOP
  172. L016AH:        cCall    <FAR PTR PostQuitMessage, 0>
  173.         XOR    AX, AX
  174.         XOR    DX, DX
  175.         JMP    SHORT L019FH
  176.         NOP
  177.         JMP    SHORT L0187H
  178. L017AH:        CMP    AX, 0002H
  179.         JZ    L016AH
  180.         .IF    (AX == 000FH)
  181.             JMP    NEAR PTR L0122H
  182.         .ENDIF
  183. L0187H:        cCall    <FAR PTR DefWindowProc, SI, WORD PTR par12, WORD PTR par10, WORD PTR par8, WORD PTR par6>
  184.         JMP    SHORT L019FH
  185.         NOP
  186.         MOV    WORD PTR par14, SI
  187. L019FH:        POP    DI
  188.         POP    SI
  189.         RET
  190. WNDPROC    ENDP
  191.  
  192.  
  193. L01ACH        DW    LROFFSET __winflags
  194. Procedure01AC    PROC    NEAR C
  195. L01AEH:        MOV    AL, -1
  196.         cCall    <NEAR PTR Procedure034E, AX>
  197. L01B4H::    XOR    BP, BP
  198.         cCall    <FAR PTR InitTask, BP>
  199.         OR    AX, AX
  200.         JZ    L01AEH
  201.         MOV    WORD PTR D0064H, ES
  202.         ADD    CX, 0100H
  203.         JB    L01AEH
  204.         MOV    WORD PTR D002EH, CX
  205.         MOV    WORD PTR D0030H, SI
  206.         MOV    WORD PTR D0032H, DI
  207.         MOV    WORD PTR D0034H, BX
  208.         MOV    WORD PTR D0036H, ES
  209.         MOV    WORD PTR D0038H, DX
  210.         CALL    FAR PTR GetVersion
  211.         MOV    WORD PTR D0066H, AX
  212.         MOV    AH, 48
  213.         .IF    (WORD PTR CS:L01ACH & SWORD PTR 0001H)
  214.             CALL    FAR PTR Dos3Call
  215.             JMP    SHORT L01FEH
  216.         .ENDIF
  217. L01FCH:        INT    0021H
  218. L01FEH:        MOV    WORD PTR D0068H, AX
  219.         .IF    ( !(WORD PTR CS:L01ACH & 0001H))
  220.             MOV    AL, 0
  221.             MOV    BYTE PTR D006BH, AL
  222.         .ENDIF
  223. L020FH:        XOR    AX, AX
  224.         cCall    <FAR PTR WaitEvent, AX>
  225.         cCall    <FAR PTR InitApp, WORD PTR D0032H>
  226.         OR    AX, AX
  227.         JZ    L01AEH
  228.         CALL    NEAR PTR Procedure0268
  229.         CALL    NEAR PTR Procedure047E
  230.         CALL    NEAR PTR Procedure05FC
  231.         CALL    NEAR PTR Procedure085C
  232.         cCall    <NEAR PTR Procedure024C, WORD PTR D00A0H, WORD PTR D009EH, WORD PTR D009CH>
  233.         ADD    SP, 6
  234.         cCall    <NEAR PTR Procedure0347, AX>
  235.         MOV    AX, 0015H
  236.         JMP    NEAR PTR L0683H
  237. Procedure01AC    ENDP
  238.  
  239.  
  240. ;        Missing MOV SP,BP and POP BP in epilogue.
  241. Procedure024C    PROC    NEAR C
  242.         PUSH    BP
  243.         MOV    BP, SP
  244.         cCall    <NEAR PTR Procedure0010, WORD PTR D0032H, WORD PTR D0030H, WORD PTR D0036H, WORD PTR D0034H, WORD PTR D0038H>
  245.         POP    BP
  246.         RET
  247. Procedure024C    ENDP
  248.  
  249.  
  250. Procedure0268    PROC    NEAR C
  251.         MOV    AX, 3500H
  252.         .IF    (WORD PTR CS:L01ACH & SWORD PTR 0001H)
  253.             CALL    FAR PTR Dos3Call
  254.             JMP    SHORT L027DH
  255.         .ENDIF
  256. L027BH:        INT    0021H
  257. L027DH:        MOV    WORD PTR D0050H, BX
  258.         MOV    WORD PTR D0052H, ES
  259.         PUSH    CS
  260.         POP    DS
  261.         MOV    AX, 2500H
  262.         MOV    DX, 067EH
  263.         .IF    (WORD PTR CS:L01ACH & SWORD PTR 0001H)
  264.             CALL    FAR PTR Dos3Call
  265.             JMP    SHORT L029FH
  266.         .ENDIF
  267. L029DH:        INT    0021H
  268. L029FH:        PUSH    SS
  269.         POP    DS
  270.         MOV    CX, WORD PTR D00B8H
  271.         JCXZ    L02D0H
  272.         MOV    ES, WORD PTR D0064H
  273.         MOV    SI, WORD PTR ES:D002CH
  274.         MOV    AX, WORD PTR D00BAH
  275.         MOV    DX, WORD PTR D00BCH
  276.         XOR    BX, BX
  277.         CALL    DWORD PTR D00B6H
  278.         JAE    L02C2H
  279.         JMP    NEAR PTR L0424H
  280. L02C2H:        MOV    AX, WORD PTR D00BEH
  281.         MOV    DX, WORD PTR D00C0H
  282.         MOV    BX, 0003H
  283.         CALL    DWORD PTR D00B6H
  284. L02D0H:        MOV    ES, WORD PTR D0064H
  285.         MOV    CX, WORD PTR ES:D002CH
  286.         JCXZ    L0319H
  287.         MOV    ES, CX
  288.         XOR    DI, DI
  289. L02DFH:        .IF    (BYTE PTR ES:[DI] != 0)
  290.             MOV    CX, 000DH
  291.             MOV    SI, 0042H
  292.             REPE CMPSB
  293.             JZ    L02FAH
  294.             MOV    CX, 7FFFH
  295.             XOR    AX, AX
  296.             REPNE SCASB
  297.             JNZ    L0319H
  298.             JMP    SHORT L02DFH
  299. L02FAH:            PUSH    ES
  300.             PUSH    DS
  301.             POP    ES
  302.             POP    DS
  303.             MOV    SI, DI
  304.             MOV    DI, 0074H
  305.             MOV    CL, 4
  306. L0305H:            LODSB
  307.             SUB    AL, 65
  308.             JB    L0317H
  309.             SHL    AL, CL
  310.             XCHG    DX, AX
  311.             LODSB
  312.             SUB    AL, 65
  313.             JB    L0317H
  314.             OR    AL, DL
  315.             STOSB
  316.             JMP    SHORT L0305H
  317. L0317H:            PUSH    SS
  318.             POP    DS
  319.         .ENDIF
  320. L0319H:        MOV    SI, 00C2H
  321.         MOV    DI, 00C2H
  322.         CALL    NEAR PTR Procedure03EB
  323.         MOV    SI, 00C2H
  324.         MOV    DI, 00C2H
  325.         CALL    NEAR PTR Procedure03FA
  326.         MOV    SI, 00C2H
  327.         MOV    DI, 00C2H
  328.         CALL    NEAR PTR Procedure03EB
  329.         MOV    SI, 00C2H
  330.         MOV    DI, 00C2H
  331.         CALL    NEAR PTR Procedure03EB
  332.         MOV    SI, 00C2H
  333.         MOV    DI, 00C2H
  334.         CALL    NEAR PTR Procedure03FA
  335.         RET
  336. Procedure0268    ENDP
  337.  
  338.  
  339. ;        Missing MOV SP,BP and POP BP in epilogue.
  340. Procedure0347    PROC    NEAR C
  341.         PUSH    BP
  342.         MOV    BP, SP
  343.         XOR    CX, CX
  344.         JMP    SHORT L0368H
  345. Procedure0347    ENDP
  346.  
  347.  
  348. ;        Missing MOV SP,BP and POP BP in epilogue.
  349. Procedure034E    PROC    NEAR C
  350.         PUSH    BP
  351.         MOV    BP, SP
  352.         MOV    CX, 0001H
  353.         JMP    SHORT L0368H
  354.         PUSH    BP
  355.         MOV    BP, SP
  356.         PUSH    SI
  357.         PUSH    DI
  358.         MOV    CX, 0100H
  359.         JMP    SHORT L0368H
  360.         PUSH    BP
  361.         MOV    BP, SP
  362.         PUSH    SI
  363.         PUSH    DI
  364.         MOV    CX, 0101H
  365. L0368H::    MOV    BYTE PTR D00A9H, CH
  366.         PUSH    CX
  367.         OR    CL, CL
  368.         JNZ    L038DH
  369.         MOV    SI, 024CH
  370.         MOV    DI, 024CH
  371.         CALL    NEAR PTR Procedure03EB
  372.         MOV    SI, 00C2H
  373.         MOV    DI, 00C2H
  374.         CALL    NEAR PTR Procedure03EB
  375.         MOV    SI, WORD PTR [BP+4]
  376.         cCall    <NEAR PTR Procedure085C, SI>
  377.         ADD    SP, 2
  378. L038DH:        MOV    SI, 00C2H
  379.         MOV    DI, 00C2H
  380.         CALL    NEAR PTR Procedure03EB
  381.         MOV    SI, 00C2H
  382.         MOV    DI, 00C2H
  383.         CALL    NEAR PTR Procedure03FA
  384.         CALL    NEAR PTR Procedure03C2
  385.         POP    AX
  386.         OR    AH, AH
  387.         JNZ    L03BEH
  388.         MOV    AX, WORD PTR [BP+4]
  389.         MOV    AH, 76
  390.         .IF    (WORD PTR CS:L01ACH & SWORD PTR 0001H)
  391.             CALL    FAR PTR Dos3Call
  392.             JMP    SHORT L03BEH
  393.         .ENDIF
  394. L03BCH:        INT    0021H
  395. L03BEH:        POP    DI
  396.         POP    SI
  397.         POP    BP
  398.         RET
  399. Procedure034E    ENDP
  400.  
  401.  
  402. Procedure03C2    PROC    NEAR C
  403.         MOV    CX, WORD PTR D00B8H
  404.         JCXZ    L03CFH
  405.         MOV    BX, 0002H
  406.         CALL    DWORD PTR D00B6H
  407. L03CFH:        PUSH    DS
  408.         LDS    DX, DWORD PTR D0050H
  409.         MOV    AX, 2500H
  410.         .IF    (WORD PTR CS:L01ACH & SWORD PTR 0001H)
  411.             CALL    FAR PTR Dos3Call
  412.             JMP    SHORT L03E9H
  413.         .ENDIF
  414. L03E7H:        INT    0021H
  415. L03E9H:        POP    DS
  416.         RET
  417. Procedure03C2    ENDP
  418.  
  419.  
  420. Procedure03EB    PROC    NEAR C
  421. L03EBH:
  422.         .IF    (SI < DI)
  423.             DEC    DI
  424.             DEC    DI
  425.             MOV    CX, WORD PTR [DI]
  426.             JCXZ    L03EBH
  427.             CALL    CX
  428.             JMP    SHORT L03EBH
  429.         .ENDIF
  430. L03F9H:        RET
  431. Procedure03EB    ENDP
  432.  
  433.  
  434. Procedure03FA    PROC    NEAR C
  435. L03FAH:
  436.         .IF    (SI < DI)
  437.             SUB    DI, 4
  438.             MOV    AX, WORD PTR [DI]
  439.             OR    AX, WORD PTR [DI+2]
  440.             JZ    L03FAH
  441.             CALL    DWORD PTR [DI]
  442.             JMP    SHORT L03FAH
  443.         .ENDIF
  444. L040CH:        RET
  445. Procedure03FA    ENDP
  446.  
  447.  
  448. L040DH        DB    0000H
  449. Procedure040D    PROC    NEAR C
  450. Procedure040D    ENDP
  451.  
  452.  
  453. Procedure040E    PROC    NEAR C <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>
  454.         MOV    AX, 00FCH
  455.         cCall    <NEAR PTR Procedure06ED, AX>
  456.         MOV    AX, 00FFH
  457.         cCall    <NEAR PTR Procedure06ED, AX>
  458.         RET
  459. Procedure040E    ENDP
  460.  
  461.  
  462. L0423H        DB    0000H
  463. Procedure0423    PROC    NEAR C
  464. L0424H::    MOV    AX, 0002H
  465.         JMP    NEAR PTR L0683H
  466. Procedure0423    ENDP
  467.  
  468.  
  469. _aNchkstk    PROC    NEAR C
  470.         POP    BX
  471.         INC    AX
  472.         AND    AL, -2
  473.         SUB    AX, SP
  474.         JAE    L0477H
  475.         NEG    AX
  476.         CMP    WORD PTR SS:D000AH, AX
  477.         JA    L0477H
  478.         .IF    (WORD PTR SS:D000CH > AX)
  479.             MOV    WORD PTR D000CH, AX
  480.         .ENDIF
  481. L0446H:        MOV    SP, AX
  482.         JMP    BX
  483.         POP    BX
  484.         POP    DX
  485.         INC    AX
  486.         AND    AL, -2
  487.         SUB    AX, SP
  488.         JAE    L046CH
  489.         NEG    AX
  490.         CMP    WORD PTR SS:D000AH, AX
  491.         JA    L046CH
  492.         .IF    (WORD PTR SS:D000CH > AX)
  493.             MOV    WORD PTR D000CH, AX
  494.         .ENDIF
  495. L0467H:        MOV    SP, AX
  496.         PUSH    DX
  497.         PUSH    BX
  498.         RETF
  499. _aNchkstk    ENDP
  500.  
  501.  
  502. L047DH        DB    0000H
  503. Procedure046C    PROC    NEAR C
  504. L046CH::    MOV    DX, WORD PTR SS:D00ACH
  505.         INC    DX
  506.         JZ    L0477H
  507.         JMP    WORD PTR D00ACH
  508. L0477H::    MOV    AX, 0000H
  509.         JMP    NEAR PTR L0683H
  510. Procedure046C    ENDP
  511.  
  512.  
  513. L05FBH        DB    0000H
  514. Procedure047E    PROC    NEAR C
  515.         POP    WORD PTR D00AEH
  516.         MOV    AX, 0104H
  517.         MOV    CX, 0008H
  518.         CALL    NEAR PTR Procedure071E
  519.         MOV    WORD PTR D00A4H, DX
  520.         MOV    WORD PTR D00A2H, AX
  521.         PUSH    DX
  522.         PUSH    AX
  523.         PUSH    WORD PTR D0032H
  524.         PUSH    DX
  525.         PUSH    AX
  526.         MOV    AX, 0104H
  527.         cCall    <FAR PTR GetModuleFileName, AX>
  528.         POP    BX
  529.         POP    ES
  530.         ADD    BX, AX
  531.         MOV    BYTE PTR ES:[BX], 0
  532.         MOV    DX, 0001H
  533.         MOV    DI, 0001H
  534.         MOV    SI, 0081H
  535.         MOV    DS, WORD PTR D0064H
  536. L04B8H:        LODSB
  537.         CMP    AL, 32
  538.         JZ    L04B8H
  539.         CMP    AL, 9
  540.         JZ    L04B8H
  541.         .IF    (AL != 13)
  542.             OR    AL, AL
  543.             JZ    L0534H
  544.             INC    DI
  545. L04CAH:            DEC    SI
  546. L04CBH:            LODSB
  547.             CMP    AL, 32
  548.             JZ    L04B8H
  549.             CMP    AL, 9
  550.             JZ    L04B8H
  551.             CMP    AL, 13
  552.             JZ    L0534H
  553.             OR    AL, AL
  554.             JZ    L0534H
  555.             .IF    (AL != 34)
  556.                 .IF    (AL != 92)
  557.                     INC    DX
  558.                     JMP    SHORT L04CBH
  559.                 .ENDIF
  560. L04E7H:                XOR    CX, CX
  561. L04E9H:                INC    CX
  562.                 LODSB
  563.                 CMP    AL, 92
  564.                 JZ    L04E9H
  565.                 .IF    (AL != 34)
  566.                     ADD    DX, CX
  567.                     JMP    SHORT L04CAH
  568.                 .ENDIF
  569. L04F7H:                MOV    AX, CX
  570.                 SHR    CX, 1
  571.                 ADC    DX, CX
  572.                 TEST    AL, 1
  573.                 JNZ    L04CBH
  574.                 JMP    SHORT L0504H
  575. L0503H:                DEC    SI
  576.             .ENDIF
  577. L0504H:            LODSB
  578.             CMP    AL, 13
  579.             JZ    L0534H
  580.             OR    AL, AL
  581.             JZ    L0534H
  582.             CMP    AL, 34
  583.             JZ    L04CBH
  584.             .IF    (AL != 92)
  585.                 INC    DX
  586.                 JMP    SHORT L0504H
  587.             .ENDIF
  588. L0518H:            XOR    CX, CX
  589. L051AH:            INC    CX
  590.             LODSB
  591.             CMP    AL, 92
  592.             JZ    L051AH
  593.             .IF    (AL != 34)
  594.                 ADD    DX, CX
  595.                 JMP    SHORT L0503H
  596.             .ENDIF
  597. L0528H:            MOV    AX, CX
  598.             SHR    CX, 1
  599.             ADC    DX, CX
  600.             TEST    AL, 1
  601.             JNZ    L0504H
  602.             JMP    SHORT L04CBH
  603.         .ENDIF
  604. L0534H:        PUSH    SS
  605.         POP    DS
  606.         MOV    WORD PTR D009CH, DI
  607.         ADD    DX, DI
  608.         INC    DI
  609.         SHL    DI, 1
  610.         ADD    DX, DI
  611.         INC    DX
  612.         AND    DL, -2
  613.         SUB    SP, DX
  614.         MOV    AX, SP
  615.         MOV    WORD PTR D009EH, AX
  616.         MOV    BX, AX
  617.         ADD    DI, BX
  618.         PUSH    SS
  619.         POP    ES
  620.         LDS    SI, DWORD PTR D00A2H
  621.         MOV    WORD PTR SS:[BX], SI
  622.         INC    BX
  623.         INC    BX
  624.         MOV    DS, WORD PTR SS:D0064H
  625.         MOV    SI, 0081H
  626.         JMP    SHORT L0568H
  627. L0565H:        XOR    AX, AX
  628.         STOSB
  629. L0568H:        LODSB
  630.         CMP    AL, 32
  631.         JZ    L0568H
  632.         CMP    AL, 9
  633.         JZ    L0568H
  634.         .IF    (AL != 13)
  635.             OR    AL, AL
  636.             JZ    L05F1H
  637.             MOV    WORD PTR SS:[BX], DI
  638.             INC    BX
  639.             INC    BX
  640. L057EH:            DEC    SI
  641. L057FH:            LODSB
  642.             CMP    AL, 32
  643.             JZ    L0565H
  644.             CMP    AL, 9
  645.             JZ    L0565H
  646.             .IF    (AL != 13)
  647.                 OR    AL, AL
  648.                 JZ    L05EEH
  649.                 .IF    (AL != 34)
  650.                     .IF    (AL != 92)
  651.                         STOSB
  652.                         JMP    SHORT L057FH
  653.                     .ENDIF
  654. L059BH:                    XOR    CX, CX
  655. L059DH:                    INC    CX
  656.                     LODSB
  657.                     CMP    AL, 92
  658.                     JZ    L059DH
  659.                     .IF    (AL != 34)
  660.                         MOV    AL, 92
  661.                         REP STOSB
  662.                         JMP    SHORT L057EH
  663.                     .ENDIF
  664. L05ADH:                    MOV    AL, 92
  665.                     SHR    CX, 1
  666.                     REP STOSB
  667.                     JAE    L05BBH
  668.                     MOV    AL, 34
  669.                     STOSB
  670.                     JMP    SHORT L057FH
  671. L05BAH:                    DEC    SI
  672.                 .ENDIF
  673. L05BBH:                LODSB
  674.                 CMP    AL, 13
  675.                 JZ    L05EEH
  676.                 OR    AL, AL
  677.                 JZ    L05EEH
  678.                 CMP    AL, 34
  679.                 JZ    L057FH
  680.                 .IF    (AL != 92)
  681.                     STOSB
  682.                     JMP    SHORT L05BBH
  683.                 .ENDIF
  684. L05CFH:                XOR    CX, CX
  685. L05D1H:                INC    CX
  686.                 LODSB
  687.                 CMP    AL, 92
  688.                 JZ    L05D1H
  689.                 .IF    (AL != 34)
  690.                     MOV    AL, 92
  691.                     REP STOSB
  692.                     JMP    SHORT L05BAH
  693.                 .ENDIF
  694. L05E1H:                MOV    AL, 92
  695.                 SHR    CX, 1
  696.                 REP STOSB
  697.                 JAE    L057FH
  698.                 MOV    AL, 34
  699.                 STOSB
  700.                 JMP    SHORT L05BBH
  701.             .ENDIF
  702. L05EEH:            XOR    AX, AX
  703.             STOSB
  704.         .ENDIF
  705. L05F1H:        PUSH    SS
  706.         POP    DS
  707.         MOV    WORD PTR [BX], 0000H
  708.         JMP    WORD PTR D00AEH
  709. Procedure047E    ENDP
  710.  
  711.  
  712. ;        Missing MOV SP,BP and POP BP in epilogue.
  713. Procedure05FC    PROC    NEAR C
  714.         PUSH    BP
  715.         MOV    BP, SP
  716.         cCall    <FAR PTR GetDosEnvironment, DS>
  717.         OR    AX, AX
  718.         JZ    L060BH
  719.         MOV    DX, AX
  720. L060BH:        MOV    BX, DX
  721.         MOV    ES, DX
  722.         XOR    AX, AX
  723.         XOR    SI, SI
  724.         XOR    DI, DI
  725.         MOV    CX, 0FFFFH
  726.         OR    BX, BX
  727.         JZ    L062AH
  728.         .IF    (BYTE PTR ES:D0000H != 0)
  729. L0624H:            REPNE SCASB
  730.             INC    SI
  731.             SCASB
  732.             JNZ    L0624H
  733.         .ENDIF
  734. L062AH:        MOV    AX, DI
  735.         INC    AX
  736.         AND    AL, -2
  737.         INC    SI
  738.         MOV    DI, SI
  739.         SHL    SI, 1
  740.         MOV    CX, 0009H
  741.         CALL    NEAR PTR Procedure071E
  742.         PUSH    AX
  743.         MOV    AX, SI
  744.         CALL    NEAR PTR Procedure071E
  745.         MOV    WORD PTR D00A0H, AX
  746.         PUSH    ES
  747.         PUSH    DS
  748.         POP    ES
  749.         POP    DS
  750.         MOV    CX, DI
  751.         MOV    BX, AX
  752.         XOR    SI, SI
  753.         POP    DI
  754.         DEC    CX
  755.         JCXZ    L0677H
  756. L0651H:        MOV    AX, WORD PTR [SI]
  757.         .IF    (AX == WORD PTR SS:D0042H)
  758.             PUSH    CX
  759.             PUSH    SI
  760.             PUSH    DI
  761.             MOV    DI, 0042H
  762.             MOV    CX, 0006H
  763.             REPE CMPSW
  764.             POP    DI
  765.             POP    SI
  766.             POP    CX
  767.             JZ    L066FH
  768.         .ENDIF
  769. L066AH:        MOV    WORD PTR ES:[BX], DI
  770.         INC    BX
  771.         INC    BX
  772. L066FH:        LODSB
  773.         STOSB
  774.         OR    AL, AL
  775.         JNZ    L066FH
  776.         LOOP    L0651H
  777. L0677H:        MOV    WORD PTR ES:[BX], CX
  778.         POP    DS
  779.         POP    BP
  780.         RET
  781. Procedure05FC    ENDP
  782.  
  783.  
  784. L067DH        DB    0000H
  785. Procedure067D    PROC    NEAR C
  786.         PUSH    SS
  787.         POP    DS
  788.         MOV    AX, 0003H
  789. L0683H::    cCall    <NEAR PTR Procedure040E, AX, AX>
  790.         CALL    NEAR PTR Procedure06ED
  791.         CALL    NEAR PTR Procedure06C2
  792.         XOR    BX, BX
  793.         OR    AX, AX
  794.         JZ    L06B1H
  795.         MOV    DI, AX
  796.         MOV    AX, 0009H
  797.         .IF    (BYTE PTR [DI] == 77)
  798.             MOV    AX, 000FH
  799.         .ENDIF
  800. L06A1H:        ADD    DI, AX
  801.         PUSH    DI
  802.         PUSH    DS
  803.         POP    ES
  804.         MOV    AL, 13
  805.         MOV    CX, 0022H
  806.         REPNE SCASB
  807.         MOV    BYTE PTR [DI-1], BL
  808.         POP    AX
  809. L06B1H:        cCall    <FAR PTR FatalAppExit, BX, DS, AX>
  810.         MOV    AX, 00FFH
  811.         cCall    <FAR PTR FatalExit, AX>
  812. Procedure067D    ENDP
  813.  
  814.  
  815. Procedure06C2    PROC    NEAR PASCAL <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>, par4:WORD
  816.         PUSH    SI
  817.         PUSH    DI
  818.         PUSH    DS
  819.         POP    ES
  820.         MOV    DX, WORD PTR par4
  821.         MOV    SI, 0102H
  822. L06CFH:        LODSW
  823.         .IF    (AX != DX)
  824.             INC    AX
  825.             XCHG    SI, AX
  826.             JZ    L06E4H
  827.             XCHG    DI, AX
  828.             XOR    AX, AX
  829.             MOV    CX, 0FFFFH
  830.             REPNE SCASB
  831.             MOV    SI, DI
  832.             JMP    SHORT L06CFH
  833.         .ENDIF
  834. L06E4H:        XCHG    SI, AX
  835.         POP    DI
  836.         POP    SI
  837.         RET
  838. Procedure06C2    ENDP
  839.  
  840.  
  841. Procedure06ED    PROC    NEAR PASCAL <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>, par4:WORD
  842.         PUSH    DI
  843.         .IF    (WORD PTR D00B2H != 0)
  844.             cCall    <NEAR PTR Procedure06C2, WORD PTR par4>
  845.             OR    AX, AX
  846.             JZ    L0716H
  847.             XCHG    DX, AX
  848.             MOV    DI, DX
  849.             XOR    AX, AX
  850.             MOV    CX, 0FFFFH
  851.             REPNE SCASB
  852.             NOT    CX
  853.             DEC    CX
  854.             MOV    BX, WORD PTR D006EH
  855.             CALL    NEAR PTR Procedure0861
  856.         .ENDIF
  857. L0716H:        POP    DI
  858.         RET
  859. Procedure06ED    ENDP
  860.  
  861.  
  862. L071DH        DB    0000H
  863. Procedure071D    PROC    NEAR C
  864. Procedure071D    ENDP
  865.  
  866.  
  867. Procedure071E    PROC    NEAR C <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>
  868.         PUSH    BX
  869.         PUSH    ES
  870.         PUSH    CX
  871.         MOV    CX, 1000H
  872.         XCHG    CX, WORD PTR D00B0H
  873.         cCall    <NEAR PTR Procedure0868, CX, AX>
  874.         POP    BX
  875.         POP    WORD PTR D00B0H
  876.         POP    CX
  877.         MOV    DX, DS
  878.         OR    AX, AX
  879.         JZ    L0740H
  880.         POP    ES
  881.         POP    BX
  882.         JMP    SHORT L0745H
  883. L0740H:        MOV    AX, CX
  884.         JMP    NEAR PTR L0683H
  885. L0745H:        RET
  886. Procedure071E    ENDP
  887.  
  888.  
  889. L0749H        DB    0000H
  890. Procedure0749    PROC    NEAR C
  891.         PUSH    CX
  892.         PUSH    DI
  893.         .IF    (BYTE PTR [BX+2] & SBYTE PTR 1)
  894.             CALL    NEAR PTR Procedure083C
  895.             MOV    DI, SI
  896.             MOV    AX, WORD PTR [SI]
  897.             .IF    (AL & SBYTE PTR 1)
  898.                 SUB    CX, AX
  899.                 DEC    CX
  900.             .ENDIF
  901. L0760H:            INC    CX
  902.             INC    CX
  903.             MOV    SI, WORD PTR [BX+4]
  904.             OR    SI, SI
  905.             JZ    L07B5H
  906.             ADD    CX, SI
  907.             JAE    L0776H
  908.             XOR    AX, AX
  909.             MOV    DX, 0FFF0H
  910.             JCXZ    L07A4H
  911.             JMP    SHORT L07B5H
  912. L0776H:            PUSH    SS
  913.             POP    ES
  914.             MOV    AX, WORD PTR D00B0H
  915.             .IF    (AX != 1000H)
  916.                 MOV    DX, 8000H
  917. L0784H:                .IF    (DX >= AX)
  918.                     SHR    DX, 1
  919.                     JNZ    L0784H
  920.                     JMP    SHORT L07B0H
  921.                 .ENDIF
  922. L078EH:                CMP    DX, 8
  923.                 JB    L07B0H
  924.                 SHL    DX, 1
  925.                 MOV    AX, DX
  926.             .ENDIF
  927. L0797H:            DEC    AX
  928.             MOV    DX, AX
  929.             ADD    AX, CX
  930.             JAE    L07A0H
  931.             XOR    AX, AX
  932. L07A0H:            NOT    DX
  933.             AND    AX, DX
  934. L07A4H:            cCall    <NEAR PTR Procedure07D6, DX>
  935.             POP    DX
  936.             JAE    L07B8H
  937.             CMP    DX, -16
  938.             JZ    L07B5H
  939. L07B0H:            MOV    AX, 0010H
  940.             JMP    SHORT L0797H
  941.         .ENDIF
  942. L07B5H:        STC
  943.         JMP    SHORT L07D3H
  944. L07B8H:        MOV    DX, AX
  945.         SUB    DX, WORD PTR ES:[BX+4]
  946.         MOV    WORD PTR [BX+4], AX
  947.         MOV    WORD PTR [BX+10], DI
  948.         MOV    SI, WORD PTR [BX+12]
  949.         DEC    DX
  950.         MOV    WORD PTR [SI], DX
  951.         INC    DX
  952.         ADD    SI, DX
  953.         MOV    WORD PTR [SI], 0FFFEH
  954.         MOV    WORD PTR [BX+12], SI
  955. L07D3H:        POP    DI
  956.         POP    CX
  957.         RET
  958. Procedure0749    ENDP
  959.  
  960.  
  961. Procedure07D6    PROC    NEAR C
  962.         MOV    DX, AX
  963.         .IF    ( !(BYTE PTR [BX+2] & 4))
  964. L07E0H:            PUSH    DX
  965.             PUSH    CX
  966.             PUSH    BX
  967.             MOV    SI, WORD PTR [BX+6]
  968.             MOV    BX, WORD PTR CS:L01ACH
  969.             XOR    CX, CX
  970.             OR    DX, DX
  971.             JNZ    L07F8H
  972.             TEST    BX, 0010H
  973.             JNZ    L0837H
  974.             INC    CX
  975. L07F8H:            MOV    AX, 0022H
  976.             .IF    ( !(BX & 0001H))
  977.                 MOV    AX, 0020H
  978.             .ENDIF
  979. L0804H:            cCall    <FAR PTR GlobalRealloc, SI, CX, DX, AX>
  980.             OR    AX, AX
  981.             JZ    L0837H
  982.             CMP    AX, SI
  983.             JNZ    L0831H
  984.             cCall    <FAR PTR GlobalSize, SI>
  985.             OR    DX, AX
  986.             JZ    L0831H
  987.             POP    BX
  988.             POP    CX
  989.             POP    DX
  990.             MOV    AX, DX
  991.             .IF    (BYTE PTR [BX+2] & SBYTE PTR 4)
  992.                 DEC    DX
  993.                 MOV    WORD PTR [BX-2], DX
  994.             .ENDIF
  995. L082EH:            CLC
  996.             JMP    SHORT L083BH
  997.         .ENDIF
  998. L0831H:        MOV    AX, 0012H
  999.         JMP    NEAR PTR L0683H
  1000. L0837H:        POP    BX
  1001.         POP    CX
  1002.         POP    DX
  1003.         STC
  1004. L083BH:        RET
  1005. Procedure07D6    ENDP
  1006.  
  1007.  
  1008. Procedure083C    PROC    NEAR C
  1009.         PUSH    DI
  1010.         MOV    SI, WORD PTR [BX+10]
  1011.         .IF    (SI == WORD PTR [BX+12])
  1012.             MOV    SI, WORD PTR [BX+8]
  1013.         .ENDIF
  1014. L0848H:        LODSW
  1015.         .IF    (AX != -2)
  1016.             MOV    DI, SI
  1017.             AND    AL, -2
  1018.             ADD    SI, AX
  1019.             JMP    SHORT L0848H
  1020.         .ENDIF
  1021. L0856H:        DEC    DI
  1022.         DEC    DI
  1023.         MOV    SI, DI
  1024.         POP    DI
  1025.         RET
  1026. Procedure083C    ENDP
  1027.  
  1028.  
  1029. ;        Missing MOV SP,BP and POP BP in epilogue.
  1030. Procedure085C    PROC    NEAR C
  1031.         PUSH    BP
  1032.         MOV    BP, SP
  1033.         POP    BP
  1034.         RET
  1035. Procedure085C    ENDP
  1036.  
  1037.  
  1038. L0867H        DB    0000H
  1039. Procedure0861    PROC    NEAR C
  1040.         MOV    AX, 0014H
  1041.         JMP    NEAR PTR L0683H
  1042. Procedure0861    ENDP
  1043.  
  1044.  
  1045. Procedure0868    PROC    NEAR C <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>, par4:WORD
  1046.         LOCAL    local2:WORD, local4:WORD
  1047.         MOV    AX, 0FFFFH
  1048.         cCall    <FAR PTR LockSegment, AX>
  1049.         MOV    AX, 0020H
  1050.         PUSH    AX
  1051.         .IF    (WORD PTR par4 != 0)
  1052.             MOV    AX, WORD PTR par4
  1053.             JMP    SHORT L0889H
  1054.         .ENDIF
  1055. L0886H:        MOV    AX, 0001H
  1056. L0889H:        cCall    <FAR PTR LocalAlloc, AX>
  1057.         MOV    WORD PTR local2, AX
  1058.         MOV    AX, 0FFFFH
  1059.         cCall    <FAR PTR UnlockSegment, AX>
  1060.         MOV    AX, WORD PTR local2
  1061.         RET
  1062. Procedure0868    ENDP
  1063.  
  1064.  
  1065. Procedure08A2    PROC    NEAR C <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>, par4:WORD
  1066.         PUSH    WORD PTR par4
  1067.         CALL    FAR PTR LocalFree
  1068.         RET
  1069. Procedure08A2    ENDP
  1070.  
  1071.  
  1072. Procedure08B1    PROC    NEAR C <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>, par6:WORD, par4:WORD
  1073.         LOCAL    local2:WORD, local4:WORD
  1074.         .IF    (WORD PTR par4 == 0)
  1075.             cCall    <NEAR PTR Procedure0868, WORD PTR par6>
  1076.             ADD    SP, 2
  1077.             JMP    SHORT L08FEH
  1078.             NOP
  1079.         .ENDIF
  1080. L08CAH:        MOV    AX, 0FFFFH
  1081.         cCall    <FAR PTR LockSegment, AX>
  1082.         PUSH    WORD PTR par4
  1083.         .IF    (WORD PTR par6 != 0)
  1084.             MOV    AX, WORD PTR par6
  1085.             JMP    SHORT L08E5H
  1086.             NOP
  1087.         .ENDIF
  1088. L08E2H:        MOV    AX, 0001H
  1089. L08E5H:        PUSH    AX
  1090.         MOV    AX, 0062H
  1091.         cCall    <FAR PTR LocalRealloc, AX>
  1092.         MOV    WORD PTR local2, AX
  1093.         MOV    AX, 0FFFFH
  1094.         cCall    <FAR PTR UnlockSegment, AX>
  1095.         MOV    AX, WORD PTR local2
  1096. L08FEH:        RET
  1097. Procedure08B1    ENDP
  1098.  
  1099.  
  1100. Procedure0902    PROC    NEAR C <NOLOADDS, NOINCBP, FORCEFRAME, NOCHECKSTACK>, par4:WORD
  1101.         PUSH    WORD PTR par4
  1102.         CALL    FAR PTR LocalSize
  1103.         RET
  1104. Procedure0902    ENDP
  1105.  
  1106.  
  1107. Procedure0911    PROC    NEAR C
  1108.         NOP
  1109. Procedure0911    ENDP
  1110.  
  1111.  
  1112.         END    L01B4H
  1113.